package com.zcyr.core;

import com.zcyr.exception.DatabaseEnvironmentException;
import com.zcyr.exception.TrymeUserSQLException;
import com.zcyr.pojo.SQLResult;

import java.util.List;

/**
 * 规范DatabaseEnvironment
 */
public interface IDatabaseEnvironment {

    /**
     * 所有该环境的数据库连接执行sql
     * @param sql 要执行的sql
     * @return 执行成功后返回所有结果
     * @throws TrymeUserSQLException 如果SQL语法异常则抛出
     * @throws DatabaseEnvironmentException 如果环境异常则抛出
     */
    List<SQLResult> executeSQL(String sql) throws TrymeUserSQLException, DatabaseEnvironmentException;

    /**
     * 释放该环境用户创建的所有table
     * @return 成功删除table的数量
     * @throws DatabaseEnvironmentException 如果出现SQL语法异常则抛出该异常
     */
    int releaseTables() throws DatabaseEnvironmentException;

    /**
     * 释放该环境用户创建的所有schema
     * @return 成功删除schema的数量
     * @throws DatabaseEnvironmentException 如果出现SQL语法异常则抛出该异常
     */
    int releaseSchemas() throws DatabaseEnvironmentException;

    /**
     * 释放该环境用户创建的所有user
     * @return 成功删除user的数量
     * @throws DatabaseEnvironmentException 如果出现SQL语法异常则抛出该异常
     */
    int releaseUsers() throws DatabaseEnvironmentException;
}